//
//  RBVideoPlayer.h
//  RBVideoPlayer
//
//  Created by Lan on 2017/8/4.
//  Copyright © 2017年 SummerTea. All rights reserved.
//  只实现了基础播放功能
//  只测试了视频播放功能

#import <UIKit/UIKit.h>

@class CALayer;
typedef NS_ENUM(NSUInteger, RBMediaPlayerMode)
{
    RBMediaPlayerModeSingleOnce,    /**<单曲一次*/
    RBMediaPlayerModeSingleRepeat,  /**<单曲循环*/
    RBMediaPlayerModeListOnce,      /**<列表一次*/
    RBMediaPlayerModeListRepeat,    /**<列表循环*/
    RBMediaPlayerModeRandom         /**<随机播放*/
};

typedef NS_ENUM(NSUInteger, RBMediaPlayerStatus)
{
    RBMediaPlayerStatusReadyToPlay, /**可以播放(接下来可以seek之类的操作)<*/
    RBMediaPlayerStatusUnavailable, /**不可播放状态<*/
    RBMediaPlayerStatusPlaying,     /**播放中<*/
    RBMediaPlayerStatusBuffering,   /**缓冲中<*/
    RBMediaPlayerStatusPaused,      /**暂停播放<*/
    RBMediaPlayerStatusPlayToEnd,   /**<播放到尾部了*/
};

//todo
//rate volume 亮度 滑动快进(调用频率)
//播放结束
//结束了再次播放
//播放状态变化playing
//进入后台有问题

@interface RBMediaPlayer : NSObject

/** 播放模式,在播放下一个资源的时候生效 */
@property(nonatomic, assign) RBMediaPlayerMode mode;

@property(nonatomic, assign, readonly) RBMediaPlayerStatus status;

/** 是否在播放状态(包括缓冲状态) */
@property(nonatomic, assign, readonly) BOOL playing;

/** 播放速度 */
@property(nonatomic, assign) CGFloat rate;

/** 音频文件的播放建议选择单例 */
+ (instancetype)player;

/** 设置播放源列表,不会对当前播放产生影响 */
- (void)setSources: (NSArray<NSURL *> *)sources;

/** 准备播放编号index的文件,开始缓冲 */
- (BOOL)getReadyToPlay: (NSInteger)index;
/** 播放列表中第一个文件 */
- (void)play;
/** 播放列表中标号index的文件 */
- (void)playWithIndex: (NSInteger)index;
/** 暂停播放 */
- (void)pause;
/** 恢复播放 */
- (void)resume;
/** 停止播放,会销毁播放组件 */
- (void)stop;

/** 拖动进度到time秒 */
- (void)seekToTime: (CGFloat)time;

/** 添加画面到layer同时设置frame */
- (void)addPictureToLayer: (CALayer *)layer frame: (CGRect)frame;
/** 单独设置画面的frame */
- (void)setPictureFrame: (CGRect)frame;
/** 移除画面 */
- (void)removePicture;

/** 状态status 资源url */
@property(nonatomic, copy) void(^statusBlock)(RBMediaPlayerStatus status, NSURL *url);
/** 资源总时长duration 播放时长currentTime 资源url */
@property(nonatomic, copy) void(^durationBlock)(CGFloat duration, CGFloat currentTime, NSURL *url);
/** 资源总时长duration 缓冲时长cacheTime 资源url */
@property(nonatomic, copy) void(^cacheBlock)(CGFloat duration, CGFloat cacheTime, NSURL *url);

- (CGFloat)duration;
- (CGFloat)currentTime;

@end
